Окно.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 
(*~\Глагол\Отделы\Обмен~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ Окно;
(*============================================================================* 
 * НАЗНАЧЕНИЕ: ввод и вывод текста в Графическое или Консольное окно
 *============================================================================*)
ИСПОЛЬЗУЕТ 
  ЦвЗнак,
  Ввод,
  ГОС,
  КОС;
        (* ссылка на соответствующие задачи из ГОС и КОС *)
ПЕР
  ПисатьЦвет-        :ЗАДАЧА(с,к:ЦЕЛ; цвет:ЗНАК);
  ПисатьЗнак-        :ЗАДАЧА(с,к:ЦЕЛ; цвет:ЗНАК);
  ЧитатьЦвет-        :ЗАДАЧА(с,к:ЦЕЛ):ЗНАК;
  ЧитатьЗнак-        :ЗАДАЧА(с,к:ЦЕЛ):ЗНАК;
  Вверх-             :ЗАДАЧА(вс,лк,нс,пк:ЦЕЛ; новЗнак-:ЦвЗнак.Вид);
  Вниз-              :ЗАДАЧА(вс,лк,нс,пк:ЦЕЛ; новЗнак-:ЦвЗнак.Вид);
  ПисатьСтроку-      :ЗАДАЧА(цвСтрока-:ЦвЗнак.Строка; с,к,длина:ЦЕЛ);
  ПереместитьУказку- :ЗАДАЧА(с,к:ЦЕЛ);
  РазмерУказки-      :ЗАДАЧА(размер:ЦЕЛ);
  Опрос-             :ЗАДАЧА(отКлавиш+:Ввод.ОтКлавиш; отМышки+:Ввод.ОтМышки):ЦЕЛ;
  РазмерЭкрана-      :ЗАДАЧА(строк+,колонок+:ЦЕЛ);
  ИзменитьРазмер-    :ЗАДАЧА(строк,колонок:ЦЕЛ);
  СоздатьЧасы-       :ЗАДАЧА(номер,время:ЦЕЛ):ЦЕЛ;
  УдалитьЧасы-       :ЗАДАЧА(номерУд:ЦЕЛ);
  Показать-          :ЗАДАЧА;
  Отработать-        :ЗАДАЧА;

(******************************************************************************)
ЗАДАЧА Графическое-(имяПриложения-,имяШрифта-:ЦЕПЬ;
                                   размерШрифта:ЦЕЛ; задачаЧасы:ГОС.ВидЗадачиЧасы);
(* Цель:  подготовка к работе графического окна *)
УКАЗ
  ПисатьЦвет       :=ГОС.ПисатьЦвет;
  ПисатьЗнак       :=ГОС.ПисатьЗнак;
  ЧитатьЦвет       :=ГОС.ЧитатьЦвет;
  ЧитатьЗнак       :=ГОС.ЧитатьЗнак;
  Вверх            :=ГОС.Вверх;
  Вниз             :=ГОС.Вниз;
  ПисатьСтроку     :=ГОС.ПисатьСтроку;
  ПереместитьУказку:=ГОС.ПереместитьУказку;
  РазмерУказки     :=ГОС.РазмерУказки;
  Опрос            :=ГОС.Опрос;
  РазмерЭкрана     :=ГОС.РазмерЭкрана;
  ИзменитьРазмер   :=ГОС.ИзменитьРазмерОкна;
  СоздатьЧасы      :=ГОС.СоздатьЧасы;
  УдалитьЧасы      :=ГОС.УдалитьЧасы; 
  Показать         :=ГОС.ПоказатьОкно; 
  Отработать       :=ГОС.Отработать; 
  ГОС.Подготовить(имяПриложения,имяШрифта,размерШрифта,задачаЧасы)
КОН Графическое;

(******************************************************************************)
ЗАДАЧА Текстовое-(задачаЧасы:КОС.ВидЗадачиЧасы);
(* Цель:  подготовка к работе консольного окна *)
УКАЗ
  ПисатьЦвет       :=КОС.ПисатьЦвет;
  ПисатьЗнак       :=КОС.ПисатьЗнак;
  ЧитатьЦвет       :=КОС.ЧитатьЦвет;
  ЧитатьЗнак       :=КОС.ЧитатьЗнак;
  Вверх            :=КОС.Вверх;
  Вниз             :=КОС.Вниз;
  ПисатьСтроку     :=КОС.ПисатьСтроку;
  ПереместитьУказку:=КОС.ПереместитьУказку;
  РазмерУказки     :=КОС.РазмерУказки;
  Опрос            :=КОС.Опрос;
  РазмерЭкрана     :=КОС.РазмерЭкрана;
  ИзменитьРазмер   :=КОС.ИзменитьРазмерОкна;
  СоздатьЧасы      :=КОС.СоздатьЧасы;
  УдалитьЧасы      :=КОС.УдалитьЧасы; 
  Показать         :=КОС.ПоказатьОкно; 
  Отработать       :=КОС.Отработать; 
  КОС.Подготовить(задачаЧасы)
КОН Текстовое;

(******************************************************************************)
ЗАДАЧА Пробел-(вс,лк,нс,пк:ЦЕЛ);
(* Заполняет прямоугольник пробелом. *)
ПЕР
  с,к:ЦЕЛ;
УКАЗ
  ОТ с:=вс ДО нс ВЫП
    ОТ к:=лк ДО пк ВЫП
      ПисатьЗнак(с,к,' ')
    КОН
  КОН
КОН Пробел;

(******************************************************************************)
ЗАДАЧА Цвет-(вс,лк,нс,пк:ЦЕЛ; цвет:ЗНАК);
(* Устанавливает цвет прямоугольника. *)
ПЕР
  с,к:ЦЕЛ;
УКАЗ
  ОТ с:=вс ДО нс ВЫП
    ОТ к:=лк ДО пк ВЫП
      ПисатьЦвет(с,к,цвет)
    КОН
  КОН
КОН Цвет;

(******************************************************************************)
ЗАДАЧА ЦветнойПробел-(вс,лк,нс,пк:ЦЕЛ; цвет:ЗНАК);
(* Заполняет прямоугольник пробелом заданного цвета. *)
ПЕР
  строка:ЦвЗнак.Строка;
  пробел:ЦвЗнак.Вид; 
  с,к,пко:ЦЕЛ;
УКАЗ
  пробел.знак:=" ";
  пробел.цвет:=цвет;
  пко:=пк-лк;
  ОТ к:=0 ДО пко ВЫП
    строка[к]:=пробел
  КОН;
  ОТ с:=вс ДО нс ВЫП
    ПисатьСтроку(строка,с,лк,пко+1)
  КОН
КОН ЦветнойПробел;

(******************************************************************************)
ЗАДАЧА Тень-(вс,лк,нс,пк:ЦЕЛ);
(* Снаружи прямоугольника рисует тень. *)
ПЕР
  с,к:ЦЕЛ;

  ЗАДАЧА Потушить(с,к:ЦЕЛ);
  УКАЗ
    ПисатьЦвет(с,к,ВЗНАК(ВЦЕЛ(ЧитатьЦвет(с,к)) ОСТАТОК 8))
  КОН Потушить;
   
УКАЗ
  УВЕЛИЧИТЬ(пк);
  УВЕЛИЧИТЬ(нс);
  ОТ с:=вс+1 ДО нс ВЫП
    Потушить(с,пк)
  КОН;
  ОТ к:=лк+1 ДО пк ВЫП
    Потушить(нс,к)
  КОН
КОН Тень;

(******************************************************************************)
ЗАДАЧА Рамка1-(вс,лк,нс,пк:ЦЕЛ);
(* Обрамляет прямоугольник одинарной линией. *)
ПЕР
  с,к:ЦЕЛ;
УКАЗ
  ПисатьЗнак(вс,лк,250CX);
  ПисатьЗнак(нс,лк,2514X);
  ПисатьЗнак(вс,пк,2510X);
  ПисатьЗнак(нс,пк,2518X);
  ОТ к:=лк+1 ДО пк-1 ВЫП
    ПисатьЗнак(вс,к,2500X);
    ПисатьЗнак(нс,к,2500X)
  КОН;
  ОТ с:=вс+1 ДО нс-1 ВЫП
    ПисатьЗнак(с,лк,2502X);
    ПисатьЗнак(с,пк,2502X)
  КОН
КОН Рамка1;

(******************************************************************************)
ЗАДАЧА Рамка2-(вс,лк,нс,пк:ЦЕЛ);
(* Обрамляет прямоугольник двойной линией. *)
ПЕР
  с,к:ЦЕЛ;
УКАЗ
  ПисатьЗнак(вс,лк,2554X);
  ПисатьЗнак(нс,лк,255AX);
  ПисатьЗнак(вс,пк,2557X);
  ПисатьЗнак(нс,пк,255DX);
  ОТ к:=лк+1 ДО пк-1 ВЫП
    ПисатьЗнак(вс,к,2550X);
    ПисатьЗнак(нс,к,2550X)
  КОН;
  ОТ с:=вс+1 ДО нс-1 ВЫП
    ПисатьЗнак(с,лк,2551X);
    ПисатьЗнак(с,пк,2551X)
  КОН
КОН Рамка2;

(******************************************************************************)
ЗАДАЧА Черта-(вс,лк,нс,пк:ЦЕЛ);
(* Рисует горизонтальную или вертикальную черту, учитывая пересечения. *)
ПЕР
  с,к:ЦЕЛ;
  зн:ЗНАК;
УКАЗ
  ЕСЛИ  вс = нс ТО (* горизонтальная черта *)
    зн:=ЧитатьЗнак(вс,лк);
    ЕСЛИ  зн = 2502X ТО 
      зн:=251CX
    АЕСЛИ зн = 2551X ТО 
      зн:=255FX
    ИНАЧЕ
      зн:=2500X
    КОН;
    ПисатьЗнак(вс,лк,зн);
    ОТ к:=лк+1 ДО пк-1 ВЫП
      зн:=ЧитатьЗнак(вс,к);
      ЕСЛИ  зн = 2502X ТО 
        зн:=253CX
      АЕСЛИ зн = 2551X ТО 
        зн:=256BX
      ИНАЧЕ
        зн:=2500X
      КОН;
      ПисатьЗнак(вс,к,зн)
    КОН;
    зн:=ЧитатьЗнак(нс,пк);
    ЕСЛИ  зн = 2502X ТО 
      зн:=2524X
    АЕСЛИ зн = 2551X ТО 
      зн:=2562X
    ИНАЧЕ
      зн:=2500X
    КОН;
    ПисатьЗнак(нс,пк,зн);
  ИНАЧЕ (* вертикальная черта *)
    зн:=ЧитатьЗнак(вс,лк);
    ЕСЛИ  зн = 2500X ТО 
      зн:=252CX
    АЕСЛИ зн = 2550X ТО 
      зн:=2564X
    ИНАЧЕ
      зн:=2502X
    КОН;
    ПисатьЗнак(вс,лк,зн);
    ОТ с:=вс+1 ДО нс-1 ВЫП
      зн:=ЧитатьЗнак(с,лк);
      ЕСЛИ  зн = 2500X ТО 
        зн:=253CX
      АЕСЛИ зн = 2550X ТО 
        зн:=256AX
      ИНАЧЕ
        зн:=2502X
      КОН;
      ПисатьЗнак(с,лк,зн)
    КОН;
    зн:=ЧитатьЗнак(нс,пк);
    ЕСЛИ  зн = 2500X ТО 
      зн:=2534X
    АЕСЛИ зн = 2550X ТО 
      зн:=2567X
    ИНАЧЕ
      зн:=2502X
    КОН;
    ПисатьЗнак(нс,пк,зн)
  КОН
КОН Черта;

(******************************************************************************)
ЗАДАЧА Цепь-(вс,лк,нс,пк:ЦЕЛ; цепь-:ЦЕПЬ);
(* Записывает цепочку знаков в прямоугольную область. *)
ПЕР
  поз:ЦЕЛ;
  с,к:ЦЕЛ;
  знак:ЗНАК;
  длина:ЦЕЛ;
  былаВолна:КЛЮЧ;
УКАЗ
  былаВолна:=ОТКЛ;
  поз:=0;
  с:=вс;
  длина:=ДЛИНА(цепь);
  ПОКА с <= нс ВЫП
    к:=лк;
    ПОКА к <= пк ВЫП
      ЕСЛИ поз >= длина ТО ВОЗВРАТ КОН;
      знак:=цепь[поз];
      ЕСЛИ былаВолна ТО
        ПисатьЗнак(с,к,знак);
        былаВолна:=ОТКЛ
      ИНАЧЕ
        ЕСЛИ  знак = '^' ТО
          к:=пк
        АЕСЛИ знак = '~' ТО
          былаВолна:=ВКЛ
        ИНАЧЕ
          ПисатьЗнак(с,к,знак)
        КОН
      КОН;
      УВЕЛИЧИТЬ(поз);
      УВЕЛИЧИТЬ(к)
    КОН;
    УВЕЛИЧИТЬ(с)
  КОН
КОН Цепь;

КОН Окно.

 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы